source vaisseau.tcl
source planete.tcl

#------------------------------------------------------------------------------------------------------------------------------

#MondeA
#
#Monde abstraction

inherit MondeA Abstraction
method MondeA constructor {control} {
	
	this inherited $control 
   	set this(tous_les_vaisseaux) [dict create]
   	set this(toutes_les_planetes) [dict create]
}

#Liste de tous les vaisseaux de tous les joueurs
method MondeA getListeVaisseau {} {
	

return $this(tous_les_vaisseaux)	

}

#Liste des vaisseaux d'un joueur de nom idj
method MondeA getListeVaisseau_joueur {idj} {
	
	set L ""
	
	foreach id [dict keys [this getListeVaisseau]] {
		
		
		if {[dict get [this getListeVaisseau] $id name] == $idj} {
		
		lappend L $id	
			
		}
		}
	
	    return $L

	
}


#ajouter un vaisseau de la liste

method MondeA ajouter_vaisseau {idv idj x y radius status} {

dict set this(tous_les_vaisseaux) $idv name $idj 
dict set this(tous_les_vaisseaux) $idv vx $x 
dict set this(tous_les_vaisseaux) $idv vy $y 
dict set this(tous_les_vaisseaux) $idv vr $radius  
dict set this(tous_les_vaisseaux) $idv vs $status 
}

#mettre à jour un vaisseau de la liste
method MondeA update_S_vaisseau {idv status} {
dict set this(tous_les_vaisseaux) $idv vs $status 
}
method MondeA update_X_vaisseau {idv x} {
dict set this(tous_les_vaisseaux) $idv vs $x 
}
method MondeA update_Y_vaisseau {idv y} {
dict set this(tous_les_vaisseaux) $idv vs $y 
}
method MondeA update_R_vaisseau {idv radius} {
dict set this(tous_les_vaisseaux) $idv vs $radius 
}


#supprimer un vaisseau de la liste
method MondeA supprimerVaisseau {idv} {

dict unset this(tous_les_vaisseaux) $idv
}

#Liste de toutes les planetes

method MondeA ajouter_planete {idp x y radius density} {
 
dict set this(toutes_les_planetes) $idp px $x 
dict set this(toutes_les_planetes) $idp py $y 
dict set this(toutes_les_planetes) $idp pr $radius 
dict set this(toutes_les_planetes) $idp pd $density 
}


method MondeA update_X_planete {idp x} {
dict set this(toutes_les_planetes) $idp px $x 
}
method MondeA update_Y_planete {idp y} {
dict set this(toutes_les_planetes) $idp py $y 
}

method MondeA update_R_planete {idp radius} {
dict set this(toutes_les_planetes) $idp pr $radius 
}

method MondeA update_X_planete {idp density} {
dict set this(toutes_les_planetes) $idp px $density 
}

method MondeA supprimer_planete {id} {
dict unset this(toutes_les_planetes) $id
}



#Monde
#
#Monde Controler

inherit Monde Control
method Monde constructor {parent window} {
	
	set this(MondeA) [MondeA ${objName}_abst $objName]
	
	set this(Carte) [Carte ${objName}_carte $objName $window]
	
	set this(MiniCarte) [MiniCarte ${objName}_minicarte $objName]
	
    this inherited $parent ${objName}_abst "" "${objName}_carte ${objName}_minicarte"
    
   #TODO
}

method Monde getListeVaisseau {} {
	
	
return [$this(MondeA) getListeVaisseau]	
	
}

method Monde getListeVaisseau_joueur {idj} {

return [$this(MondeA) getListeVaisseau_joueur $idj]	
	
}

method Monde getCanevas {} {
	
return [$this(Carte) getCanevas]
	
}	
	
method Monde ajouter_vaisseau {idv idj x y radius status} {
	
$this(MondeA) ajouter_vaisseau $idv $idj $x $y $radius $status
$this(Carte) ajouter_vaisseau $x $y $radius $idv

}

method Monde supprimerVaisseau {idv} {

$this(MondeA) supprimerVaisseau $idv
$this(Carte) supprimerVaisseau $idv	
	
}

method Monde supprimerJoueur_sesvaisseaux {idp} {
	
set sesvaisseaux [$this(MondeA) getListeVaisseau_joueur $idp]

foreach asup $sesvaisseaux {

$this(MondeA) supprimerVaisseau $asup
$this(Carte) supprimerVaisseau $asup	
	
}

	
	
	
}



#------------------------------------------------------------------------------------------------------------------------------


#CarteA
#
#Carte abstraction


inherit CarteA Abstraction
method CarteA constructor {control} {
	
	this inherited $control 
	set this(idgraphique_vaisseau) [dict create]
   
}

method CarteA ajouter_vaisseau {idv_noyau idv_graphique} {
	
	dict set this(idgraphique_vaisseau) $idv_noyau id_graphique $idv_graphique
	
}

method CarteA supprimerVaisseau {idv} {

	set id [dict get $this(idgraphique_vaisseau) $idv id_graphique]

	dict unset this(idgraphique_vaisseau) $idv
	
	return $id
}

#CarteP
#
#Carte presentation

inherit CarteP Presentation
method CarteP constructor {control window} {
	this inherited $control
	
	set this(canevas) [canvas $window.canevas -width 500 -height 600]
	pack $this(canevas) -expand 1 -fill both

}

method CarteP getCanevas {} {

return $this(canevas)	
	
}
	 
method CarteP ajouter_vaisseau {x y radius} {

set id_graphique [$this(canevas) create oval [expr $x - $radius] [expr $y - $radius] [expr $x + $radius] [expr $y + $radius] -fill green]
	
	
}

method CarteP supprimerVaisseau {id_graphique} {

$this(canevas) delete $id_graphique	
	
} 

method CarteP destructor {} {
   destroy $this(canevas)
}

#Carte
#
#Map Controler

inherit Carte Control
method Carte constructor {parent window} {
	
	set this(CarteA) [CarteA ${objName}_abst $objName]
	set this(CarteP) [CarteP ${objName}_pres $objName $window]

  	this inherited $parent ${objName}_abst ${objName}_pres
}

method Carte getCanevas {} {
	
	
return [$this(CarteP) getCanevas]
	
}

method Carte ajouter_vaisseau {x y radius idv} {

set id_graphique [$this(CarteP) ajouter_vaisseau $x $y $radius]
$this(CarteA) ajouter_vaisseau $idv $id_graphique
	
}

method Carte supprimerVaisseau {idv} {

set idv_graphique [$this(CarteA) supprimerVaisseau $idv]
$this(CarteP) supprimerVaisseau $idv_graphique	
	
}
#------------------------------------------------------------------------------------------------------------------------------

#MiniCarteP
#
#MiniCarte presentation

inherit MiniCarteP Presentation
method MiniCarteP constructor {control} {
	this inherited $control

   #TODO
}

method MiniCarteP edit {value} {
   #TODO
}

method MiniCarteP change {args} {
   #TODO
}

method MiniCarteP destructor {} {
   destroy $this(window)
}

#MiniCarte
#
#MiniCarte Controler

inherit MiniCarte Control
method MiniCarte constructor {parent} {
	


   this inherited $parent 
   #TODO
}

method MiniCarte edit {value} {
   #TODO
}

method MiniCarte change {args} {
   #TODO
}
